import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'
import { login, getUserProFile, getUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'

const state = {
  // 共享token
  token: getToken(), // 从缓存中初始化读取
  userInfo: {} // 用户基本资料
}

const mutations = {
  // 更新token
  setToken(state, payload) {
    state.token = payload // 更新Vuex中token数据

    setToken(payload) // 同步更新本地缓存token数据
  },

  // 删除token
  removeToken(state) {
    state.token = null // 清除Vuex中token

    removeToken() // 清空本地token
  },

  // 更新用户信息
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },

  // 删除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
}

const actions = {
  // 登录
  async login(context, data) {
    const res = await login(data)
    // 登录成功
    context.commit('setToken', res) // 存入token
    setTimeStamp() // 存入登录时时间
  },

  // 获取用户信息
  async getUserInfo({ commit }) {
    const res = await getUserProFile()
    const resAvatar = await getUserDetailById(res.userId)
    commit('setUserInfo', { ...res, ...resAvatar })
    return res // 后面用得到
  },

  // 退出登录
  logout({ commit }) {
    commit('removeToken')
    commit('removeUserInfo')
    resetRouter() // 重置路由
    commit('permission/setRoutes', [], { root: true }) // 表示此事的commit 是顶级的调用方式
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

